package com.qiusuo0226.core.service;


import com.qiusuo0226.core.pojo.entity.AdministrativeDivisionDO;
import com.qiusuo0226.core.pojo.dto.AdminDivisionDTO;

import java.util.List;
import java.util.Map;

/**
 * 行政区划数据处理层
 * @author qiusuo
 * @date 2022-04-05
 */
public interface AdministrativeDivisionSerivce {

    /**
     * 批量插入
     * @param params
     * @return
     */
    boolean insertBatch(List<AdministrativeDivisionDO> params);

    /**
     * 全量搜索
     * @return
     */
    List<AdministrativeDivisionDO> list();

    /**
     * 根据父级唯一标识获取子行政区划列表
     * @param pid 父级行政区划唯一标识
     * @return 行政区划列表
     */
    List<Map<String,Object>> getListTreeByPid(long pid);

    /**
     * 根据行政区划唯一标识模糊搜索获取分页的子行政区划列表
     * @param pid 行政区划唯一标识
     * @param pageNo 当前页
     * @param pageSize 分页大小
     * @param searchInfo 模糊搜索信息
     * @return
     */
    Map<String, Object> getListByPid(long pid, Integer pageNo, Integer pageSize, String searchInfo);

    /**
     * 根据id获取父级行政区划
     * @param id 当前行政区划唯一标识
     * @return 父级行政区划
     */
    AdministrativeDivisionDO getParentById(long id);


    /**
     * 批量软删除行政区划
     * @param ids 选中需要删除的行政区划唯一标识集合
     * @param type 删除方式，1完全删除，2区划删除
     * @return 删除成功数量
     */
    int removeList(List<Long> ids, Integer type);

    /**
     * 新增行政区划
     * @param administrativeDivision
     * @return
     */
    AdministrativeDivisionDO add(AdministrativeDivisionDO administrativeDivision) throws Exception;

    int modify(AdministrativeDivisionDO entity) throws Exception;

    /**
     * 获取行政区划树
     * @return 行政区划对象
     */
    List<AdminDivisionDTO> getTree();


    /**
     * 转换防范
     */
    void revert();
}
